#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H

/*-----------------------------------------------------------
 * Application specific definitions.
 *
 * These definitions should be adjusted for your particular hardware and
 * application requirements.
 *
 * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
 * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. 
 *
 * See http://www.freertos.org/a00110.html.
 *----------------------------------------------------------*/

#define configUSE_PREEMPTION		1	/*置1 RTOS使用抢占式调度器 置0 RTOS使用协作式调度器*/
#define configUSE_IDLE_HOOK			0 /*置1 使能空闲任务的钩子函数 置0 失能空闲任务的钩子函数*/							
#define configUSE_TICK_HOOK			0 /*置1 使能滴答定时器中断里的钩子函数 置0 失能滴答定时器中断里的钩子函数*/			
#define configUSE_TIME_SLICING 1
#define configCPU_CLOCK_HZ			( ( unsigned long ) 72000000 )	/*配置CPU主频*/
#define configTICK_RATE_HZ			( ( TickType_t ) 1000 ) 	/*参数用于定义系统时钟节拍数，单位Hz*/
#define configMAX_PRIORITIES		( 5 )   /*定义可供用户使用的最大优先级数 0 1 2 3 4*/
#define configMINIMAL_STACK_SIZE	( ( unsigned short ) 128 ) /*定义空闲任务的栈空间大小*/
#define configTOTAL_HEAP_SIZE		( ( size_t ) ( 17 * 1024 ) ) /*定义堆大小*/
#define configMAX_TASK_NAME_LEN		( 16 ) /*定义任务名最大的字符数，末尾的结束符 '\0'也要计算在内。*/

/*
*使能此配置将添加额外的结构体成员和函数，以此来协助可视化和跟踪，
*在使用IAR中的FreeRTOS插件时要使能这个配置，否则无法显示任务栈的使用情况。
*/
#define configUSE_TRACE_FACILITY	0 
/*
*如果用户使能了宏定义 configUSE_16_BIT_TICKS，那么TickType_t定义的就是16位无符号数
*如果没有使能，那么TickType_t定义的就是32位无符号数。
*对于32位架构的处理器，一定要禁止此宏定义，即设置此宏定义数值为0即可。
*而16位无符号数类型主要用于8位和16位架构的处理器。
*/
#define configUSE_16_BIT_TICKS		0
#define configIDLE_SHOULD_YIELD		1 /*此参数用于使能与空闲任务同优先级的任务，实际应用中不建议用户使用此功能，将其配置为0即可。*/


#define INCLUDE_xTaskGetCurrentTaskHandle 1

/* Co-routine definitions. */
#define configUSE_CO_ROUTINES 		0   /*置1 使能合作式调度相关函数。 置0 失能合作式调度相关函数*/	
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) /*定义可供用户使用的最大的合作式任务优先级数*/

/* 函数Include配置主要是指用户可以根据需要使能或者禁止在工程中使用相应的函数*/
#define INCLUDE_vTaskPrioritySet		1
#define INCLUDE_uxTaskPriorityGet		1
#define INCLUDE_vTaskDelete				1
#define INCLUDE_vTaskCleanUpResources	0
#define INCLUDE_vTaskSuspend			1
#define INCLUDE_vTaskDelayUntil			1
#define INCLUDE_vTaskDelay				1

/* 配置内核使用的中断优先级  这里是8 bit，默认最低优先级*/
#define configKERNEL_INTERRUPT_PRIORITY 		255
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
#define configMAX_SYSCALL_INTERRUPT_PRIORITY 	191 /* 等同于0xb0, 或优先级边界11.定义两组中断优先级的边界。逻辑优先级高于此值的中断不受RTOS影响 */


 /*配置系统内核优先级，这里使用的是4bit优先级，所以最低为15，跟1 中的配置相同*/
#define configLIBRARY_KERNEL_INTERRUPT_PRIORITY	15

#define xPortPendSVHandler 	PendSV_Handler
#define vPortSVCHandler 	SVC_Handler
#define xPortSysTickHandler SysTick_Handler

#endif /* FREERTOS_CONFIG_H */

